
#include "struct_typedef.h"
// typedef unsigned char uint8_t;
// typedef unsigned short uint16_t;
// typedef unsigned int uint32_t;
// typedef int int32_t;
// typedef float fp32;
/*
图形数据操作库，只用于设置图形数据已经设置图形配置。使用时需要至少调用一次graphic_data_set_inf
来设置图形数据基本信息，然后再通过draw函数设置图形形状数据。

所有函数接受一个图形数据结构指针，然后进行修改，最后返回同一个指针。
*/

#include"ui_interface.h"

typedef struct
{
    uint32_t x : 11;
    uint32_t y : 11;
} graphic_point;

typedef enum {
    Graphic_OP_Blank = 0,//空白操作
    Graphic_OP_Add = 1,//添加操作
    Graphic_OP_Change = 2,//修改操作
    Graphic_OP_Del = 3//删除操作
}Graphic_OP;//图形操作

typedef enum {
    Graphic_Color_RedBlue = 0,
    Graphic_Color_Yellow,
    Graphic_Color_Green,
    Graphic_Color_Orange,
    Graphic_Color_Purple,
    Graphic_Color_Pink,
    Graphic_Color_Cyan,
    Graphic_Color_Black,
    Graphic_Color_White
}Graphic_Color;//图形颜色
/// @brief 画线段
/// @param data 
/// @param width 线条宽度:[0,1023]
/// @param start_point 起始位置 
/// @param end_point 结束位置
/// @return data
graphic_data_struct_t* graphic_draw_line(graphic_data_struct_t* data, uint32_t width, const graphic_point start_point, const graphic_point end_point);
/// @brief 画矩形
/// @param data 
/// @param width 线条宽度:[0,1023]
/// @param start_point 左下角位置 
/// @param end_point 右上角位置
/// @return data
graphic_data_struct_t* graphic_draw_rect(graphic_data_struct_t* data, uint32_t width, const graphic_point start_point, const graphic_point end_point);
/// @brief 画圆形
/// @param data 
/// @param width 线条宽度:[0,1023]
/// @param centre_point 圆心位置 
/// @param radius 半径:[0,1023]
/// @return data
graphic_data_struct_t* graphic_draw_circle(graphic_data_struct_t* data, uint32_t width, const graphic_point centre_point, uint32_t radius);
/// @brief 画椭圆
/// @param data 
/// @param width 线条宽度:[0,1023]
/// @param centre_point 圆心位置
/// @param semi_axis x半轴长, y半轴长
/// @return data
graphic_data_struct_t* graphic_draw_ellipse(graphic_data_struct_t* data, uint32_t width, const graphic_point centre_point, const graphic_point semi_axis);
/// @brief 画椭圆弧
/// @param data 
/// @param start_angle 起始角度:[0,360]
/// @param end_angle 终止角度:[0,360]
/// @param width 线条宽度:[0,1023]
/// @param centre_point 圆心位置
/// @param semi_axis x半轴长, y半轴长
/// @return data
graphic_data_struct_t* graphic_draw_arc(graphic_data_struct_t* data, uint32_t start_angle, uint32_t end_angle, uint32_t width, const graphic_point centre_point, const graphic_point semi_axis);
/// @brief 画浮点数
/// @param data 
/// @param size 字体大小:[0:511] 
/// @param precision 小数位有效个数:[0,511]
/// @param width 线条宽度:[0,1023]
/// @param start_point 起始位置
/// @param number 数
/// @return data
graphic_data_struct_t* graphic_draw_float(graphic_data_struct_t* data, uint32_t size, uint32_t precision, uint32_t width, const graphic_point start_point, fp32 number);
/// @brief 画整数
/// @param data 
/// @param size 字体大小:[0,511]
/// @param precision 小数位有效个数:[0,511]
/// @param width 线条宽度:[0,1023]
/// @param start_point 起始位置
/// @return data
graphic_data_struct_t* graphic_draw_integer(graphic_data_struct_t* data, uint32_t size, uint32_t width, const graphic_point start_point, int32_t number);
/// @brief 画字符
/// @param data 
/// @param size 字体大小:[0,511] 
/// @param length 字符长度:[0,511]
/// @param width 线条宽度:[0,1023]
/// @param start_point 起始位置
/// @return data
graphic_data_struct_t* graphic_draw_char(graphic_data_struct_t* data, uint32_t size, uint32_t length, uint32_t width, const graphic_point start_point);
/// @brief 设置图形数据
/// @param data 
/// @param id 图形ID:[0,2^24-1]
/// @param op 图形操作
/// @param layer 图层
/// @param color 颜色
/// @return data
graphic_data_struct_t* graphic_data_set_inf(graphic_data_struct_t* data, uint32_t id, Graphic_OP op, uint32_t layer, Graphic_Color color);
/// @brief 设置为空操作
/// @param data 
/// @return data
graphic_data_struct_t* graphic_data_set_blank(graphic_data_struct_t* data);
